package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.Estado;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="estadoFaces")
@ViewScoped
public class EstadoFaces extends FacesUtil {
	
	private static final long serialVersionUID = 4620989756344415646L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<Estado> logicaEstado;
	
	private Estado estado = new Estado();
	private List<Estado> listaEstado = new ArrayList<>();
	private String estadoBusca;
	
	public EstadoFaces() {
		getSession().setAttribute("estadoSelecionado", null);
		getSession().setAttribute("cidadeSelecionada", null);
	}

	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaEstado.adicionar(estado);
				adicionarMensagem("Estado adicionado com sucesso");
				this.buscarEstado();
				fecharModal("dialogEstado");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar o Estado");
		}
	}
	
	public void prepararAdicionar() {
		this.estado = new Estado();
		abrirModal("dialogEstado");
	}
	
	public void selecionarRegistro(Long idArea, boolean editar) {
		try {
			this.estado = logicaEstado.obterPorId(Estado.class,idArea);
			
			if (editar) {
				abrirModal("dialogEstado");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaEstado.editar(this.estado);
				adicionarMensagem("Estado editado com sucesso");
				fecharModal("dialogEstado");
				this.buscarEstado();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar o Estado");
		}
	}
	
	public void remover() {
		try {
			logicaEstado.remover(Estado.class, this.estado.getId());
			adicionarMensagem("Estado removido com sucesso");
			fecharModal("dialogExcluir");
			this.buscarEstado();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover o Estado");
		}
	}
	
	public void buscarEstado() {
		if (listaEstado != null) {
			this.listaEstado.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(estadoBusca)) {
				this.listaEstado =  logicaEstado.buscarTodos(Estado.class, "nomeEstado");
			} else {
				this.listaEstado = logicaEstado.buscarPorCampo(Estado.class, "nomeEstado", estadoBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.estado.getNomeEstado())) {
			adicionarMensagem("O campo nome é obrigatório");
			valido = false;
		}

		if (!StringUtil.textoPreenchido(this.estado.getSiglaEstado())) {
			adicionarMensagem("O campo sigla é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void cidadesPorEstado(Estado estado) {
		getSession().setAttribute("estadoSelecionado", estado);
		redirecionarPagina("cidade.faces");
	}
	
	public void setLogicaEstado(DefaultLogicaContract<Estado> logicaEstado) {
		this.logicaEstado = logicaEstado;
	}

	public List<Estado> getListaEstado() {
		return listaEstado;
	}

	public void setListaEstado(List<Estado> listaEstado) {
		this.listaEstado = listaEstado;
	}

	public String getEstadoBusca() {
		return estadoBusca;
	}

	public void setEstadoBusca(String estadoBusca) {
		this.estadoBusca = estadoBusca;
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}
	
	
}